אולם כאשר מזינים טקסט עם תווים זה חותך את הטקסט ולפעמים מוסיף תווים לא מוכרים וגם מוסיף את הטקסט בצורה כזאת amp-1489 amp-1513 amp-1500.
יש לציין שכאשר אין תווים הטקט מוזן מצויין.
רק הבעיה היא בדרך כלל בתווים מסוג " ' וכו'
צירפתי תקוד אולי מישהו יציץ ויראה איפה השגיאה.
ניסתי להכניס את התווים בפקודה preg_replace וזה לא עזר.
// Make sure string is in UTF-8 and strip invalid UTF-8 characters
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
$defaults = array(
'delimiter' => '-',
'limit' => null,
'lowercase' => true,
'replacements' => array(),
'transliterate' => false,
);
// Merge options
$options = array_merge($defaults, $options);
// Make custom replacements
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
// Transliterate characters to ASCII
if ($options['transliterate']) {
$str = str_replace(array_keys($char_map), $char_map, $str);
}
// Replace non-alphanumeric characters with our delimiter
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
// Remove duplicate delimiters
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
// Truncate slug to max. characters
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
// Remove delimiter from ends
$str = trim($str, $options['delimiter']);
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}
תודה רבה לעוזרים.
11 תשובות
נראה שהפוקנרציה עצמה עובדת יופי.
מה אתה עושה הלעה עם הפלט שלה?
מנסה להזין נתונים שלפעמים כוללים תווים ופשוט זה לא נקלט במסד.
יותר מזה זה נקלט מחורבש או עם תווים לא קשורים.
מה הקוד עושה הלעה עם הפלט של הפונקציה?
או אם אתה בטוח שהבעיה בפונקציה הזו - תוכל להוסיף לכאן את הקלט שלא עובד לך כמו שצריך ?
הטקסט הזה מוזן אוטומטית על ידי ה cron job.
להלן הכותרת שמוזנת : קצת שלג ושמיכות-זה מה שצריך בשביל 'בייבי בום': עלייה של 50% במספר הלידות
ומה שיוצא בתכלס: קצת שלג ושמיכות-זה מה שצריך
זה לא נראה כאילו הבעיה היא בקוד שהבאת.
יכול להיות שיש מגבלה על עורך השדה בטבלה או שמשהו או מישהו גוזר אותו מאוחר יותר, אבל לא בתוך הפונקציה הזו.
קודם כל תודה רבה על העזרה.
ועדיין לא פתרתי תבעיה.
יכול להיות שהקוד הבא צריךלהיות אחרת.
{
$slugged = url_slug(
"$title",
array(
'delimiter' => '-',
'limit' => 80,
'lowercase' => true
)
);
return $slugged;
}
תציג את הערך של title שכן כפי שאלכס כבר ציין הבעיה היא לא בפונקציה אלה בקוד שנמצא לפני.
"שטיינמץ מציע למחזיקי אג\"ח סקורפיו תספורת של 82 מ' ש'",
array(
'delimiter' => '-',
'limit' => 80,
'lowercase' => true
)
);
אוקיי לאחר בדיקה כנראה שהבעיה היא בקובץ simplepie.inc
הקובץ בגירסה 1.3.1
ניסתי להכניס את הקובץ בגירסת מפתחים 1.4
ופשוט הוא לא קורא תנתונים.
יש למישהו פתרון בנושא הזה?
למידע נוסף http://simplepie.org
זה בלתי אפשרי לעזור לך ככה,אנחנו לא הולכים להוריד את הסקריפט הנ"ל ולבדוק מה לא בסדר בו.
בכל מקרה לא נראה שהבעיה היא בסקריפט ,אם תריץ לדוגמא דרך -
http://simplepie.org/demo/?feed=http%3A%2F%2Frss.nrg.co.il%2Fnews%2F
אתה תראה שהכל בסדר,מה שאומר שזה משהו שאתה עושה שם לא בסדר,מה שאני מציע לך זה לבצע דיבאגינג לקוד ולעבור שורה שורה עד שתמצא מה גורם למחרוזת לקטוע את עצמה ככה.
ההשערה שלי שאתה מבצע בעזרת פונקצית מחרוזת כל שהיא [כנראה sub_str] פעולה על המחרוזת ללא קידוד מתאים ולכן המחרוזת נקטעת באמצע.
יכול להיות שבקוד הבא החסרתי משהו
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
* @author Manuel Polacek / Hitflip
*/
/**
* Smarty regex_replace modifier plugin
*
* Type: modifier<br>
* Name: substring
* Purpose: substring like in php
* @param string
* @return string
*/
function smarty_modifier_slug($title)
{
$slugged = url_slug(
"$title",
array(
'delimiter' => '-',
'limit' => 80,
'lowercase' => false
)
);
return $slugged;
}
?>